Skip to main content

Analisis Sekuens menggunakan BioPython

Mempelajari dasar-dasar analisis sekuens DNA menggunakan library BioPython di Python.


Instalasi

Pastikan BioPython sudah terinstal sebelum memulai:

pip install biopython

Membuat Sekuens

Bio.Seq adalah kelas utama di BioPython untuk merepresentasikan urutan nukleotida DNA. Objek Seq dapat diperlakukan seperti string Python biasa, namun memiliki metode tambahan khusus analisis biologi.


Indexing & Pencarian

Untuk menemukan posisi basa tertentu dalam sekuens, gunakan .find() atau .index():

MetodePerilaku jika tidak ditemukan
.find()Mengembalikan -1
.index()Melempar ValueError

Gunakan .find() jika kamu tidak yakin apakah pattern ada. Gunakan .index() jika kamu yakin ada dan ingin program berhenti jika tidak ditemukan.


Slicing

Mengambil bagian dari sekuens menggunakan notasi [start:stop:step]:


Menggabungkan Sekuens

Gunakan operator + untuk menggabungkan (konkatenasi) dua objek Seq:


nt_search() dari Bio.SeqUtils mengembalikan list berisi pattern diikuti semua indeks kemunculannya:

Perhatikan bahwa nt_search() menerima string biasa, bukan objek Seq. Gunakan str(seq) untuk konversi.


Frekuensi Nukleotida

Ada dua cara menghitung frekuensi basa dalam sekuens:


Visualisasi

Gunakan matplotlib untuk memvisualisasikan frekuensi basa sebagai bar chart:


Kode Lengkap

Explorer
sequence-analysis
sesi1.py
sesi1_latihan.py
sequence-analysis/sesi1.py
from Bio.Seq import Seq

# ── Membuat Sekuens ───────────────────────────────────────────────
seqA = Seq("ATGCATGC")
print(f'Sequence A: {seqA}')

# ── Indexing & Pencarian ──────────────────────────────────────────
print(f'5th Base: {seqA[4]}')

# Cara 1: .find() -> return -1 jika tidak ketemu
print(f'.find(): {seqA.find("T")}')

# Cara 2: .index() -> raise error jika tidak ketemu
print(f'.index(): {seqA.index("T")}')

# ── Slicing ───────────────────────────────────────────────────────
print(seqA)
print(f'First 5 bases: {seqA[:5]}')
print(f'Last 5 bases: {seqA[-5:]}')
print(f'Reversed: {seqA[::-1]}')

# ── Merge / Gabungkan Sekuens ─────────────────────────────────────
seqB = Seq("CTGAGATC")
seqC = seqA + seqB
print(f'Sequence A: {seqA}')
print(f'Sequence B: {seqB}')
print(f'Sequence C: {seqC}')

# ── Menemukan Kodon ───────────────────────────────────────────────
from Bio.SeqUtils import nt_search
print(f"ATG in Sequence A: {nt_search(str(seqA), 'ATG')}")
print(f"ATG in Sequence B: {nt_search(str(seqB), 'ATG')}")

# ── Frekuensi Nukleotida ──────────────────────────────────────────
from collections import Counter

counter_A = Counter(seqA)
print(f"Frequency Sequence A: {counter_A}")

freq_A = seqA.count('A')
freq_T = seqA.count('T')
freq_G = seqA.count('G')
freq_C = seqA.count('C')
print(freq_A, freq_T, freq_G, freq_C)

# ── Visualisasi ───────────────────────────────────────────────────
import matplotlib.pyplot as plt

plt.bar(counter_A.keys(), counter_A.values())
plt.title("Frequency Sequence A using Counter")
plt.show()

plt.bar(["A", "T", "G", "C"], [freq_A, freq_T, freq_G, freq_C])
plt.title("Frequency Sequence A using .count()")
plt.show()

Latihan

Diberikan dua sekuens berikut (masing-masing 48 bp):

seqA = Seq("AGCTTGCAGCGTCCGTTAGCTCGAGTCCAGGACGTTAGTCCTGCAGTC")
seqB = Seq("CAGTAAGTTGCCGTTAGCGCGTAGTGCCAGTAAGCGGCTCGTTAGTGG")

Kerjakan soal-soal berikut:

  1. Hitung panjang masing-masing sekuens
  2. Hitung total kemunculan motif CGC pada kedua sekuens digabung
  3. Temukan kemunculan pertama motif CAGTC di setiap sekuens
  4. Buat sekuens baru: 15 basa pertama dari seqA + 10 basa terakhir dari seqB
  5. Balikkan urutan sekuens baru tersebut
  6. Hitung frekuensi basa dan visualisasikan dengan bar chart

Klik tab sesi1_latihan.py di file explorer di atas untuk melihat solusinya.


Ringkasan

FungsiDeskripsi
Seq()Membuat objek sekuens DNA
seqA[i]Akses basa ke-i (0-based)
.find(pat)Cari posisi pattern (return -1 jika tidak ada)
.index(pat)Cari posisi pattern (raise error jika tidak ada)
nt_search(str, pat)Cari semua posisi pattern (dari BioPython)
seq[start:stop]Slicing sekuens
seq[::-1]Membalik sekuens
seqA + seqBMenggabungkan sekuens
Counter(seq)Frekuensi semua basa sekaligus
.count(base)Frekuensi satu basa